#ifndef HORMIGAS_H
#define HORMIGAS_H

   #include <iostream>
   #include <fstream>
   #include <string>
   #include <list>
   #include <algorithm>
   #include <cstdlib> 
   #include <ctime> 
   #include "rectangulo.h"
   #include "heuristica.h"
   #include "contenedor.h"
   #include "solucion.h"
   
   #define RASTRO_INICIAL 10
   #define Q 100
   #define RASTRO_NO_EVAPORADO 0.75
   
      using namespace std;
       class Hormigas : public Heuristica{
	 protected: 
	   int N;
	   int T; //tamaño.
	   vector <vector<double> > rastro, incremento;
	   vector <Solucion> hormiga;
	   Contenedor C;
	 public:
	 /**
         * Constructor por defecto. 
         * En principio no se usa.
         * */
         Hormigas();

         /** Constructor
         * @param listado de los rectángulos a empaquetar
         * */
         Hormigas(list<Rectangulo> lista_in, Contenedor & C_);
	 
	 double Sumar_t_n (int origen);
	 int elegir_rectangulo(int origen);
	 void calcular_incremento_rastro(int Lk);
	 void actualizar_rastro();
	 
 	 void Listar(vector < vector< double> > h);
	 void lista( list<Rectangulo> l);
         /** 
         * Generar solución inicial 
         * Mecanismo de generación de soluciones iniciales
         * • Soluciones generadas aleatoriamente
         * • GRASP
         * • Soluciones distantes de los óptimos locales previamente encontrados
         * */
         list<Rectangulo> generaInicial();
         /** 
         * Modificar la solución 
         * 
         * • Búsqueda local
         * • Estructura de entorno
         * • Muestreo en el entorno
         * */
          list<Rectangulo> mejoraSolucion();
	 
	 ~Hormigas(){}
       };
 #endif